Ana içeriğe geç

Blok Sırasını Kullanarak İmzalanma Tarihini Bulma

Covalent Api sayesinde blokların sıralarına bağlı bir şekilde madenciler tarafından imzalanma ve zincire eklenme tarihleri bulunabilmektedir. Bu bilgi sayesinde blok kazılma hızlarının zamana bağlı olarak değişimi izlenip bu duruma göre gelecekteki işlemler üzerinde tahminler yürütülebilir.

  import requests 

Tablo 82

Tablo 82'de benzer olarak başlangıçta daha önce eklenmediyse "requests" kütüphanesi eklenir. Bu kütüphane ile oluşturulan URL yapıları sorgulanır ve veri haline getirilir. Her fonksiyon öncesinde eklenmesine gerek duyulmamaktadır. Eğer önceden eklendiyse eklenmesi derlenme süresini arttırır.

  def BlokSırasındanİmzalanmaTarihiAl(ApiAnahtarı, Zincir\_Numarası,BlokSırası): 

Tablo 83

Tablo 83'de görüldüğü üzere fonksiyon tanımlanırken kullanılması için "BlokSırasındanİmzalanmaTarihiAl" adı tercih edilmiştir. İsteğe bağlı olarak bu durum değiştirilebilmektedir. Fonksiyon parametrelerine yakından bakılacak olunursa:

  • ApiAnahtarı: Kayıt olunurken Covalent Api tarafından sağlanan ve işlemlerin yapılmasını sağlayan anahtar yapısıdır. Kayıt esnasında ücretsiz bir şekilde oluşturulur ve giriş yapılınca ana sayfada yer alır.
  • Zincir_Numarası: İmzalanma tarihinin alınacağı blok zinciri ifade etmektedir. Bu zincir üzerindeki sıraya göre çıktı verilmektedir. Zincir Numarası Covalent Api tarafından önceden belirlenmiştir ve belirli sayılar belirli zincirlere karşılık gelmektedir.
  • BlokSırası: İmzalanma tarihinin hangi blok sırası üzerinden alınacağını ifade etmektedir. Girilen bu sıraya uygun olarak çıktı alınır. Eğer bu değer sayı yerine "latest" ibaresi girilirse o ana kadar imzalanmış olan blokların en sonuncusu çıktı olarak verilmektedir.
  URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/block\_v2/" + BlokSırası +"/?&key=" + ApiAnahtarı 

Tablo 84

Tablo 84'de sorgunun yapılacağı URL yapısı oluşturulmaktadır. Bu yapı oluşturulurken sabitlerin arasına parametreler sıraya uygun bir şekilde yerleştirilmektedir. Eklenen parametrelere bakılacak olunursa ilk olarak zincir numarası devamında blok sırası ve api anahtarı şeklindedir. Uygun bir şekilde birleştirilmesinden sonra URL sorgulanmaya hazır bir hal almaktadır.

  istek = requests.get(URL) hamverim = (istek.json()) 

Tablo 85

Tablo 85'de verildiği üzere hazırlanan URL yapısı başlangıçta eklenen "requests" kütüphanesinin ".get" metoduna girilerek "istek" adındaki değişkene kaydedilir. Bu şekilde kaydedilmesinden sonra istek değişkeni ".json" fonksiyonu kullanılarak anahtar kilit mekanizması ile erişebileceğimiz hale getirilir. Bu şekle getirildikten sonra "hamverim" değişkenine kaydedilir.

  verim = hamverim["data"] 

Tablo 86

Veri json formatına çevrildikten sonra ham hale gelmektedir. Bu verinin içerisinde blokları içeren kısım bulunsa da yapılan sorgunun başarılı olup olmadığı ve varsa hatanın içeriği bulunmaktadır. Ancak şu anlık bu tür verilerin kullanılmaması tercih edilmiştir. İlgilenilen tek bölüm "data" anahtarı içerisindeki kısım olmaktadır. Bu nedenle Tablo 86'da "hamverim" değişkeninden "data" anahtarı ile belirlenen parça alınır ve "verim" değişkenine kaydedilir.

  liste = [] 

Tablo 87

Tablo 87'de alınan imzalanma tarihlerinin ve blok uzunluklarının ekleneceği liste oluşturulmaktadır. Bu liste şu anda boş tanımlansa da ilerideki kısımlarda içerisine özel anahtarlar ile erişimi sağlanan veriler gelecektir.

  SonGüncelleme = verim["updated\_at"] 

Tablo 88

Tablo 88'de görüldüğü üzere ilk anlamlandırma işlemine geçilecek olunursa başlangıçta veri içerisinden "updated_at" anahtarı kullanılarak imzalanan bloğun son kontrol tarihine erişilir. Bu tarih sonrasında "SonGüncelleme" adında değişkene kaydedilerek kullanıma hazır hale gelir. Bu veri sayesinde alınan verinin doğruluğunun son kontrol edildiği tarihe ve saate erişilmiş olunmaktadır.

  liste.append("Son Güncelleme: " + SonGüncelleme) 

Tablo 89

Değişkene kaydedilen veri sonrasında listeye hazır hale gelmiştir. Tablo 89'da görüldüğü üzere Listeye eklenmeden önce son olarak string toplama işlemi ile veriye uygun başlık verilir. Bu sayede listeden veri okunurken daha kolay anlamlandırılır. Bu işlemi sağlayan string toplama işlemi sadece string değerleri ile çalışmaktadır. Bu nedenle eğer değerlerden string formatında olmayan varsa bu değerin "str()" fonksiyonu içerisine yerleştirilmesi gerekmektedir.

  items = verim["items"] 

Tablo 90

Tablo 90'da veri içerisinden ana kullanılacak kısmı içeren "items" anahtarı sayesinde erişilen parça "items" değişkeni içerisinde kaydedilmektedir. Daha önceki fonksiyonlarda her ne kadar "items" değişkeni içerisinde birden fazla liste değeri bulunsa da bu fonksiyondaki liste,n içerisinde tek eleman içermektedir. Bunun nedeni blok sırasından tek bir imzalanma tarihine erişimin bulunmasıdır.

  İmzalanmaTarihi = items[0]["signed\_at"] BlokUzunluğu = items[0]["height"] 

Tablo 91

Tablo 91'de görüldüğü üzere fonksiyonun iki önemli değeri bulunmaktadır. Bu değerler "items" listesi içerisinden 0 index'ine sahip sözlükte bulunmaktadır. Bu liste içerisinde farklı index'li değer bulunmamaktadır. Her iki değere de ayrı ayrı bakılacak olunursa:

  • İmzalanmaTarihi: Fonksiyonun asıl çıktısı ve kullanılma nedenidir. Blok sırasının girilmesi ardından verilen çıktıdır. Bu değer farklı blok sıraları da incelenerek işlemler üzerinde tahminler geliştirilebilir. İtems'in 0. İndex'i içerisinden "signed_at" anahtarı ile erişilmektedir.
  • BlokUzunluğu: Fonksiyonda girdi olarak girilmiştir. Blok sırasını ifade eden BlokUzunluğudur: Fonksiyon çıktısı olarak da verilmesi çıktı anlamlandırması için kolaylık sağlamaktadır. İtems'in 0. İndex'i içerisinden "height" anahtarı ile erişilmektedir.
  liste.append("İmzalanma Tarihi: "+ İmzalanmaTarihi) liste.append("Blok Uzunluğu: "+ str(BlokUzunluğu)) 

Tablo 92

Tablo 92'da verildiği üzere uygun anahtarlarla erişilerek değişkenlere kaydedilen bu değerler listeye eklenmeden önce string toplama işlemine tabi tutularak uygun başlıklandırılma yapılmaktadır. Bu şekilde veri okunurken kolaylık sağlanmış olunulmaktadır. String toplama işleminde dikkat edilmesi gereken kısım önceden de belirtildiği üzere iki değerin de string formatında olmasıdır. Bu nedenle integer değere sahip BlokUzunluğu değişkeni "str()" fonksiyonu içerisinden geçirilerek string hale çevrilir ve sonrasında toplama işlemine sokulur.

  Sayfalandırma = verim["pagination"] liste.append("Sayfalandırma: "+ str(Sayfalandırma)) 

Tablo 93

Tablo 93'de verinin uzunluğuna bağlı olarak sayfalandırma verisi de "pagination" anahtarı ile erişilir ve değişkene kaydedilir. Kaydedilen bu değişken string yapma ve toplama fonksiyonları ile uygun başlık ile listeye eklenir.

  for i in liste: print(i) 

Tablo 94

Tüm veriler listeye eklenmiştir ancak ekrana gösterilmemiştir. Bunu sağlamak için Tablo 94'de "for" döngüsü içerisinde her bir elemanı "i" olarak adlandırır ve sırayla ekrana yazdırırız. Bu şekilde veri görselleştirilmiş hale gelir.

  return liste 

Tablo 95

Tablo 95'de görüldüğü üzere tüm veriler liste içerisine kaydedildikten sonra döngü çıktısı olarak liste "return" metodu ile kaydedilir. Bu şekilde fonksiyon çağırılıp bir değişkene eşitlenirse liste olarak değişken fonksiyon çıktısı halini alır.

  def BlokSırasındanİmzalanmaTarihiAl(ApiAnahtarı, Zincir\_Numarası,BlokSırası): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/block\_v2/" + BlokSırası +"/?&key=" + ApiAnahtarı istek = requests.get(URL) verim = (istek.json()) verim = verim["data"] liste = [] SonGüncelleme = verim["updated\_at"] liste.append("Son Güncelleme: " + SonGüncelleme) items = verim["items"] İmzalanmaTarihi = items[0]["signed\_at"] BlokUzunluğu = items[0]["height"] liste.append("İmzalanma Tarihi: "+ İmzalanmaTarihi) liste.append("Blok Uzunluğu: "+ str(BlokUzunluğu)) Sayfalandırma = verim["pagination"] liste.append("Sayfalandırma: "+ str(Sayfalandırma)) for i in liste: print(i) return liste 

Tablo 96

Tablo 96'da tüm kodlar ifade edilmiştir. Bu fonksiyonu özetleyecek olunursa; seçilen parametreler ile URL yapısı uygun bir şekilde oluşturulur. Oluşturulan bu URL eklenen "request" kütüphanesi ile sorgulanır. Sorgulanıp json verisi şeklinde kaydedilen bu veri uygun anahtarlama işlemleri ile değişkenlere kaydedilir. Bu işlem sonrasında oluşturulan boş listeye her bir eleman uygun başlıklar verilerek kaydedilir. Kaydedilen liste elamanları for döngüsü ile ekrana yazdırılır ve fonksiyon çıktısı olarak liste verilir.

  Son Güncelleme: 2021-07-28T19:17:46.906433824Z İmzalanma Tarihi: 2015-07-30T15:39:02Z Blok Uzunluğu: 250 Sayfalandırma: None 

Tablo 97

Tablo 97'de örnek bir kod çıktısı verilmektedir. Fonksiyonun çalıştırılması halinde bu şekilde bir çıktı ile karşılaşılacaktır.